X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C93973.29FEB7E8@onstor-exch02.onstor.net>; Tue, 28 Oct 2008 20:05:14 -0700
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----_=_NextPart_001_01C93973.29FEB7E8"
Content-class: urn:content-classes:message
Subject: RE: func spec- quota tree support on prepopulated dir
Date: Tue, 28 Oct 2008 20:05:10 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E0C19CE0D@onstor-exch02.onstor.net>
In-Reply-To: <BB375AF679D4A34E9CA8DFA650E2B04E0C19CD8D@onstor-exch02.onstor.net>
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator: 
Thread-Topic: func spec- quota tree support on prepopulated dir
Thread-Index: Ack2GoPjyl0UKu1TQ3C32k284BBvuAAABR4AAAAWftAAAGApcAAALn5AAJSZxYAAIqx90AAJuJsQABNvrCA=
References: <BB375AF679D4A34E9CA8DFA650E2B04E05DA1FFA@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E05DA1FFB@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E0C19CCDF@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E0C19CD50@onstor-exch02.onstor.net> <BB375AF679D4A34E9CA8DFA650E2B04E0C19CD8D@onstor-exch02.onstor.net>
From: "Jobi Ariyamannil" <jobi.ariyamannil@onstor.com>
To: "Maxim Kozlovsky" <maxim.kozlovsky@onstor.com>,
	"Henry Lau" <henry.lau@onstor.com>,
	"dl-Design Review" <dl-designreview@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C93973.29FEB7E8
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_002_01C93973.29FEB7E8"


------_=_NextPart_002_01C93973.29FEB7E8
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Ok, please decide on the following during the review.  We can decide on
the design based on the requirements.

=20

1.	The assumption is that tree quota is recommended to be enabled
on empty directories.  In case if somebody forgets to do that, we are
providing an option to enable the tree quotas on pre-populated
directories with some restrictions.  Enabling tree quotas on populated
directories is very expensive operation and should be discouraged.  If
we need to have this feature generally recommended, we need to revisit
some of the restrictions mentioned in the func spec.  The current tree
quota implementation has a lot of restrictions anyway - a pre-populated
directory cannot be moved into a tree quota, simple tree quota cannot be
converted to nested tree quota and vice versa, hardlinks cannot span
multiple tree quotas etc.
2.	Do we need to support enabling nested tree quota on a populated
directory?  How widely nested tree quota is used in the field?
3.	Is it ok to double or triple the space usage after enabling tree
quota on a populated directory when snapshots are present?  In the worst
case, we need to COW all the pages of the inode file.  This process can
repeat during the proposed cleanup if another snapshot is taken when
quota enable operation is in progress.  We cannot easily predict the
required space for the operation and reserving large amount of space may
significantly affect other filesystem activities.  Also we cannot hold
the operation until more space become available (which may never
happen). The COW on the large directory due to user operation is
different since each and every operation reaches the filesystem
individually and the filesystem makes checks for space availability for
each of them separately and the individual operation is failed if space
is not available.  Also if one operation fails, the filesystem does not
have to undo all the changes done to the directory so far.  IMO, we
should enable tree quotas without any additional space usage.  Also the
filesystem needs to stay consistent irrespective of the ENOSPC
situation.
4.	What should be the impact of the tree quota enable operation on
a populated directory on other system activities?  We were thinking of
doing non-transactional inode updates and skipping COW to avoid
overconsumption of the journal and double writes.

=20

________________________________

From: Maxim Kozlovsky=20
Sent: Tuesday, October 28, 2008 11:10 AM
To: Jobi Ariyamannil; Henry Lau; dl-Design Review
Subject: RE: func spec- quota tree support on prepopulated dir

=20

=20

=20

________________________________

From: Jobi Ariyamannil=20
Sent: Tuesday, October 28, 2008 6:10 AM
To: Maxim Kozlovsky; Henry Lau; dl-Design Review
Subject: RE: func spec- quota tree support on prepopulated dir

=20

The proposed solution is trying to address the following by putting some
restrictions.

The quota enable operation can be very time consuming depending on the
number of files in the directory.

=20

1.	We cannot have a single transaction to update all the inodes in
the directory with the new tree quota id.  Also we cannot have all the
inodes locked at the same time.

[MK] ok

2.	We don't want multiple directory tree traversals.  We cannot
enable tree quota on the directory if hardlinks spanning multiple tree
quotas present in the directory.  That condition cannot be detected
until we walk through the complete directory tree.

[MK] ok

3.	We don't want to deny any filesystem services while quota enable
operation is in progress.  There could be many activities in the
directory while the quota rebuild is in progress.  If we need to support
enabling nested quotas on populated directories, the parent quota tree
needs to be updated when some block modification transaction is
performed in the directory.  This can get really complicated if we need
to clean up after a failure of the quota enable operation.  To keep
things simple, we are proposing to support enabling simple tree quota on
populated directories.  Also having nested tree quotas inside the
directory would complicate failure cases.  Also we need to make sure
none of the parent tree quotas report transient quota information.
Tree quotas can be nested upto 64 levels.  We can consider adding the
nested tree quotas in a subsequent release.

[MK] Actually the cleanup is simpler with the nested quotas compared to
the simple quotas. When cleaning up after a failed simple quota tree
creation failure, the parent tree needs to be updated. When cleaning up
after a failed nested quota tree creation, the parent quota tree does
not need to be updated. The same is true for the conversion. The failure
condition exists in both cases. It does not look like adding the
restrictions will buy you more than 2-5 days of development time, it
should be mostly a matter of adding a few if/else statements.=20

4.	It is true that skipping COW is putting the restrictions on the
snapshot revert and mirror transfer.  If we allow COW, there are other
serious issues to deal with.  The ENOSPC handling in our filesystem has
a lot of issues and COWs needed on a large directory can run into ENOSPC
issues.  Currently, the filesystem will throw volume exceptions if run
into out of space condition.  Also if we fail the quota enable operation
after running out of space, the undo operation also can fail due to
ENOSPC issues if another snapshot is taken in between.  In that case,
the filesystem quotas will be a lot inconsistent.   Also it is not right
to push the blocks to snapshots for some internal modification.  Storing
the tree quota id in the inode is something completely internal to the
filesystem.  Also the COW operations will trigger a lot of logging as
well.  If somebody strongly thinks the snapshot and mirroring issues
should be avoided, then we can introduce some other metadata tracking
all the newly created tree quotas on populated directories and do the
clean up during the snapshot revert operation.  Our initial feeling is
that snapshot revert is not a common operation in the field and we don't
have to complicate the design to support that after quota enable
operation.  If we skip COWs, the quota enable operation may not be
visible on the mirror target until all the updated inode file blocks are
COWed somehow.

[MK]  ENOSPC issue during quota conversion can be dealt like any other
ENOSPC issues. Before starting the operation, check if enough free space
is available, if not enough space is available, add the request to the
waiting list and wait for the auto grow or for the space to become
available. Why invent a special case when there is no reason to. The cow
on the large directory can be caused by a user operation as well, and a
user operation can run into a ENOSPC and cause a volume exception. We
are not trying to special case user operations just because there is
such probability. On a bright side, if we are in ENOSPC condition it
does not matter if the quotas are inconsistent. The users can not do any
update operation anyway.

=20

To summarize:

=20

1.	implementing the full support for nested and simple quotas will
make 4 week project 4.5 week project. It seem that spending the time now
is better than answering customers' questions and possibly issuing a
patch when somebody asks for nested tree support.=20
2.	The special cases are bad and should be avoided unless
absolutely necessary. In my opinion this case does not fall into
"absolutely necessary"
	category. Avoiding the special cases reduces the development and
testing time.

=20

We should move this discussion into the review meeting since our
opinions on the matter are so different.

=20

________________________________

From: Maxim Kozlovsky=20
Sent: Monday, October 27, 2008 1:29 PM
To: Henry Lau; dl-Design Review
Subject: RE: func spec- quota tree support on prepopulated dir

=20

Why the restriction to simple quota trees only is necessary? I don't see
much of a difference in the implementation.

=20

What is the reason for failing with an error if a nested quota tree is
encountered? The implementation is not complicated and does not differ a
lot from simple quota tree case.

=20

It seems that the idea of avoiding COW adds a lot of unnecessary
complications and restrictions in the implementation. The amount of COWs
or disk traffic or inode file fragmentation is no different from what
happens when an administrator or a regular user does something like
recursive application of permissions in the explorer. The fact that
every inode which belongs to a new quota tree has to be modified should
be easy to explain to the users and should not cause any objections.
Doing COW normally avoids all the mirroring and snapshot issues.

=20

________________________________

From: Henry Lau=20
Sent: Friday, October 24, 2008 2:17 PM
To: dl-Design Review
Subject: RE: func spec- quota tree support on prepopulated dir

=20

Hi,

=20

Here is the functional spec to support quota tree on pre-populated
directories. Please enjoy and provide me feedback.

=20

\\mightydog\software\Kegg\Functional Specs\quotaTree_Dirs.doc
<file:///\\mightydog\software\Kegg\Functional%20Specs\quotaTree_Dirs.doc
>=20

=20

=20

Thanks,

Henry

=20

=20

Henry Lau
Software engineer

ONStor, Inc.
office: 408.963-2486

Henry.lau@onstor.com=20
http://www.onstor.com <http://www.onstor.com>=20

=20

=20


------_=_NextPart_002_01C93973.29FEB7E8
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:st1=3D"urn:schemas-microsoft-com:office:smarttags" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 11 (filtered medium)">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><o:SmartTagType
 namespaceuri=3D"urn:schemas-microsoft-com:office:smarttags" =
name=3D"PersonName"/>
<!--[if !mso]>
<style>
st1\:*{behavior:url(#default#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{color:navy;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal;
	font-family:Arial;
	color:windowtext;}
span.EmailStyle18
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle19
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle20
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle21
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle22
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle23
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle24
	{mso-style-type:personal;
	font-family:Arial;
	color:navy;}
span.EmailStyle26
	{mso-style-type:personal-reply;
	font-family:Arial;
	color:navy;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:321202290;
	mso-list-type:hybrid;
	mso-list-template-ids:-1426402370 67698703 67698713 67698715 67698703 =
67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
	{mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1
	{mso-list-id:343165968;
	mso-list-type:hybrid;
	mso-list-template-ids:1956003966 67698703 67698713 67698715 67698703 =
67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
	{mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level2
	{mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level3
	{mso-level-tab-stop:1.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level4
	{mso-level-tab-stop:2.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level5
	{mso-level-tab-stop:2.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level6
	{mso-level-tab-stop:3.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level7
	{mso-level-tab-stop:3.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level8
	{mso-level-tab-stop:4.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l1:level9
	{mso-level-tab-stop:4.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l2
	{mso-list-id:449014804;
	mso-list-type:hybrid;
	mso-list-template-ids:-301445836 67698703 67698713 67698715 67698703 =
67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
	{mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l3
	{mso-list-id:548493293;
	mso-list-template-ids:-265225426;}
@list l3:level1
	{mso-level-start-at:3;
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l4
	{mso-list-id:910385107;
	mso-list-template-ids:-213197092;}
@list l4:level1
	{mso-level-start-at:2;
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l5
	{mso-list-id:1118992878;
	mso-list-template-ids:-2002484774;}
@list l6
	{mso-list-id:1367367011;
	mso-list-template-ids:-863963710;}
@list l6:level1
	{mso-level-start-at:4;
	mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l7
	{mso-list-id:1377465013;
	mso-list-template-ids:-1279245702;}
@list l8
	{mso-list-id:1457986074;
	mso-list-type:hybrid;
	mso-list-template-ids:261654408 67698703 67698713 67698715 67698703 =
67698713 67698715 67698703 67698713 67698715;}
@list l8:level1
	{mso-level-tab-stop:.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level2
	{mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level3
	{mso-level-tab-stop:1.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level4
	{mso-level-tab-stop:2.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level5
	{mso-level-tab-stop:2.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level6
	{mso-level-tab-stop:3.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level7
	{mso-level-tab-stop:3.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level8
	{mso-level-tab-stop:4.0in;
	mso-level-number-position:left;
	text-indent:-.25in;}
@list l8:level9
	{mso-level-tab-stop:4.5in;
	mso-level-number-position:left;
	text-indent:-.25in;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext=3D"edit" spidmax=3D"1027" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext=3D"edit">
  <o:idmap v:ext=3D"edit" data=3D"1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=3DEN-US link=3Dblue vlink=3Dnavy>

<div class=3DSection1>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Ok, please decide on the following =
during
the review.&nbsp; We can decide on the design based on the =
requirements.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<ol style=3D'margin-top:0in' start=3D1 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l0 level1 =
lfo11'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>The
     assumption is that tree quota is recommended to be enabled on empty
     directories.&nbsp; In case if somebody forgets to do that, we are
     providing an option to enable the tree quotas on pre-populated =
directories
     with some restrictions.&nbsp; Enabling tree quotas on populated
     directories is very expensive operation and should be =
discouraged.&nbsp;
     If we need to have this feature generally recommended, we need to =
revisit
     some of the restrictions mentioned in the func spec.&nbsp; The =
current
     tree quota implementation has a lot of restrictions anyway &#8211; =
a pre-populated
     directory cannot be moved into a tree quota, simple tree quota =
cannot be
     converted to nested tree quota and vice versa, hardlinks cannot =
span
     multiple tree quotas etc.<o:p></o:p></span></font></li>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l0 level1 =
lfo11'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>Do
     we need to support enabling nested tree quota on a populated
     directory?&nbsp; How widely nested tree quota is used in the =
field?<o:p></o:p></span></font></li>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l0 level1 =
lfo11'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>Is
     it ok to double or triple the space usage after enabling tree quota =
on a
     populated directory when snapshots are present?&nbsp; In the worst =
case,
     we need to COW all the pages of the inode file.&nbsp; This process =
can
     repeat during the proposed cleanup if another snapshot is taken =
when quota
     enable operation is in progress.&nbsp; We cannot easily predict the
     required space for the operation and reserving large amount of =
space may
     significantly affect other filesystem activities.&nbsp; Also we =
cannot
     hold the operation until more space become available (which may =
never
     happen). The COW on the large directory due to user operation is =
different
     since each and every operation reaches the filesystem individually =
and the
     filesystem makes checks for space availability for each of them =
separately
     and the individual operation is failed if space is not =
available.&nbsp;
     Also if one operation fails, the filesystem does not have to undo =
all the
     changes done to the directory so far.&nbsp; IMO, we should enable =
tree
     quotas without any additional space usage.&nbsp; Also the =
filesystem needs
     to stay consistent irrespective of the ENOSPC =
situation.<o:p></o:p></span></font></li>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l0 level1 =
lfo11'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>What
     should be the impact of the tree quota enable operation on a =
populated
     directory on other system activities?&nbsp; We were thinking of =
doing
     non-transactional inode updates and skipping COW to avoid =
overconsumption
     of the journal and double writes.<o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=3DMsoNormal align=3Dcenter style=3D'text-align:center'><font =
size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'>

<hr size=3D2 width=3D"100%" align=3Dcenter tabindex=3D-1>

</span></font></div>

<p class=3DMsoNormal><b><font size=3D2 face=3DTahoma><span =
style=3D'font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font =
size=3D2
face=3DTahoma><span style=3D'font-size:10.0pt;font-family:Tahoma'> =
<st1:PersonName
w:st=3D"on">Maxim Kozlovsky</st1:PersonName> <br>
<b><span style=3D'font-weight:bold'>Sent:</span></b> Tuesday, October =
28, 2008
11:10 AM<br>
<b><span style=3D'font-weight:bold'>To:</span></b> Jobi Ariyamannil; =
<st1:PersonName
w:st=3D"on">Henry Lau</st1:PersonName>; dl-Design Review<br>
<b><span style=3D'font-weight:bold'>Subject:</span></b> RE: func spec- =
quota tree
support on prepopulated dir</span></font><o:p></o:p></p>

</div>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div style=3D'border:none;border-left:solid blue 1.5pt;padding:0in 0in =
0in 4.0pt'>

<div>

<div class=3DMsoNormal align=3Dcenter style=3D'text-align:center'><font =
size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'>

<hr size=3D2 width=3D"100%" align=3Dcenter tabindex=3D-1>

</span></font></div>

<p class=3DMsoNormal><b><font size=3D2 face=3DTahoma><span =
style=3D'font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font =
size=3D2
face=3DTahoma><span style=3D'font-size:10.0pt;font-family:Tahoma'> =
<st1:PersonName
w:st=3D"on">Jobi Ariyamannil</st1:PersonName> <br>
<b><span style=3D'font-weight:bold'>Sent:</span></b> Tuesday, October =
28, 2008
6:10 AM<br>
<b><span style=3D'font-weight:bold'>To:</span></b> <st1:PersonName =
w:st=3D"on">Maxim
 Kozlovsky</st1:PersonName>; <st1:PersonName w:st=3D"on">Henry =
Lau</st1:PersonName>;
dl-Design Review<br>
<b><span style=3D'font-weight:bold'>Subject:</span></b> RE: func spec- =
quota tree
support on prepopulated dir</span></font><o:p></o:p></p>

</div>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>The proposed solution is trying to =
address
the following by putting some restrictions.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>The quota enable operation can be =
very
time consuming depending on the number of files in the =
directory.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<ol style=3D'margin-top:0in' start=3D1 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l8 level1 =
lfo3'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>We cannot
     have a single tran<st1:PersonName =
w:st=3D"on">sa</st1:PersonName>ction to
     update all the inodes in the directory with the new tree quota =
id.&nbsp;
     Also we cannot have all the inodes locked at the <st1:PersonName =
w:st=3D"on">sa</st1:PersonName>me
     time.<o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>[MK] ok</span></font></i></b><font size=3D2 =
color=3Dnavy
face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;color:navy'><o:p></o:p></span=
></font></p>

<ol style=3D'margin-top:0in' start=3D2 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l8 level1 =
lfo3'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>We
     don&#8217;t want multiple directory tree traver<st1:PersonName =
w:st=3D"on">sa</st1:PersonName>ls.&nbsp;
     We cannot enable tree quota on the directory if hardlinks spanning
     multiple tree quotas present in the directory.&nbsp; That condition =
cannot
     be detected until we walk through the complete directory =
tree.<o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>[MK] ok</span></font></i></b><font size=3D2 =
color=3Dnavy
face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;color:navy'><o:p></o:p></span=
></font></p>

<ol style=3D'margin-top:0in' start=3D3 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l8 level1 =
lfo3'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>We
     don&#8217;t want to deny any filesystem services while quota enable
     operation is in progress.&nbsp; There could be many activities in =
the
     directory while the quota rebuild is in progress.&nbsp; If we need =
to
     support enabling nested quotas on populated directories, the parent =
quota
     tree needs to be updated when some block modification =
tran<st1:PersonName
     w:st=3D"on">sa</st1:PersonName>ction is performed in the =
directory.&nbsp;
     This can get really complicated if we need to clean up after a =
failure of
     the quota enable operation.&nbsp; To keep things simple, we are =
proposing
     to support enabling simple tree quota on populated =
directories.&nbsp; Also
     having nested tree quotas inside the directory would complicate =
failure
     cases.&nbsp; Also we need to make sure none of the parent tree =
quotas
     report transient quota information. &nbsp;&nbsp;Tree quotas can be =
nested
     upto 64 levels.&nbsp; We can consider adding the nested tree quotas =
in a subsequent
     release.<o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>[MK] Actually the cleanup is simpler with the nested =
quotas
compared to the simple quotas. When cleaning up after a failed simple =
quota
tree creation failure, the parent tree needs to be updated. When =
cleaning up
after a failed nested quota tree creation, the parent quota tree does =
not need
to be updated. The <st1:PersonName w:st=3D"on">sa</st1:PersonName>me is =
true for
the conversion. The failure condition exists in both cases. It does not =
look
like adding the restrictions will buy you more than 2-5 days of =
development
time, it should be mostly a matter of adding a few if/else statements. =
</span></font></i></b><font
size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;
color:navy'><o:p></o:p></span></font></p>

<ol style=3D'margin-top:0in' start=3D4 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l8 level1 =
lfo3'><font size=3D2
     color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial'>It
     is true that skipping COW is putting the restrictions on the =
snapshot
     revert and mirror transfer.&nbsp; If we allow COW, there are other =
serious
     issues to deal with.&nbsp; The ENOSPC handling in our filesystem =
has a lot
     of issues and COWs needed on a large directory can run into ENOSPC
     issues.&nbsp; Currently, the filesystem will throw volume =
exceptions if
     run into out of space condition.&nbsp; Also if we fail the quota =
enable
     operation after running out of space, the undo operation also can =
fail due
     to ENOSPC issues if another snapshot is taken in between.&nbsp; In =
that
     case, the filesystem quotas will be a lot inconsistent. =
&nbsp;&nbsp;Also
     it is not right to push the blocks to snapshots for some internal =
modification.&nbsp;
     Storing the tree quota id in the inode is something completely =
internal to
     the filesystem.&nbsp; Also the COW operations will trigger a lot of
     logging as well.&nbsp; If somebody strongly thinks the snapshot and
     mirroring issues should be avoided, then we can introduce some =
other
     metadata tracking all the newly created tree quotas on populated
     directories and do the clean up during the snapshot revert
     operation.&nbsp; Our initial feeling is that snapshot revert is not =
a
     common operation in the field and we don&#8217;t have to complicate =
the
     design to support that after quota enable operation.&nbsp; If we =
skip
     COWs, the quota enable operation may not be visible on the mirror =
target
     until all the updated inode file blocks are COWed =
somehow.<o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>[MK] &nbsp;ENOSPC issue during quota conversion can =
be dealt
like any other ENOSPC issues. Before starting the operation, check if =
enough
free space is available, if not enough space is available, add the =
request to
the waiting list and wait for the auto grow or for the space to become
available. Why invent a special case when there is no reason to. The cow =
on the
large directory can be caused by a user operation as well, and a user =
operation
can run into a ENOSPC and cause a volume exception. We are not trying to
special case user operations just because there is such probability. On =
a
bright side, if we are in ENOSPC condition it does not matter if the =
quotas are
inconsistent. The users can not do any update operation =
anyway.<o:p></o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'><o:p>&nbsp;</o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>To summarize:<o:p></o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'><o:p>&nbsp;</o:p></span></font></i></b></p>

<ol style=3D'margin-top:0in' start=3D1 type=3D1>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l1 level1 =
lfo9'><b><i><font
     size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:
     Arial;font-weight:bold;font-style:italic'>implementing the full =
support
     for nested and simple quotas will make 4 week project 4.5 week =
project. It
     seem that spending the time now is better than answering =
customers&#8217;
     questions and possibly issuing a patch when somebody asks for =
nested tree
     support. <o:p></o:p></span></font></i></b></li>
 <li class=3DMsoNormal style=3D'color:navy;mso-list:l1 level1 =
lfo9'><b><i><font
     size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:
     Arial;font-weight:bold;font-style:italic'>The special cases are bad =
and
     should be avoided unless absolutely neces<st1:PersonName =
w:st=3D"on">sa</st1:PersonName>ry.
     In my opinion this case does not fall into &#8220;absolutely =
neces<st1:PersonName
     w:st=3D"on">sa</st1:PersonName>ry&#8221;<br>
     category. Avoiding the special cases reduces the development and =
testing
     time.</span></font></i></b><font size=3D2 face=3DArial><span =
style=3D'font-size:
     10.0pt;font-family:Arial'><o:p></o:p></span></font></li>
</ol>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'><o:p>&nbsp;</o:p></span></font></i></b></p>

<p class=3DMsoNormal><b><i><font size=3D2 color=3Dnavy =
face=3DArial><span
style=3D'font-size:10.0pt;font-family:Arial;color:navy;font-weight:bold;
font-style:italic'>We should move this discussion into the review =
meeting since
our opinions on the matter are so different.</span></font></i></b><font =
size=3D2
color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;font-family:Arial;
color:navy'><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div>

<div class=3DMsoNormal align=3Dcenter style=3D'text-align:center'><font =
size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'>

<hr size=3D2 width=3D"100%" align=3Dcenter tabindex=3D-1>

</span></font></div>

<p class=3DMsoNormal><b><font size=3D2 face=3DTahoma><span =
style=3D'font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font =
size=3D2
face=3DTahoma><span style=3D'font-size:10.0pt;font-family:Tahoma'> =
<st1:PersonName
w:st=3D"on">Maxim Kozlovsky</st1:PersonName> <br>
<b><span style=3D'font-weight:bold'>Sent:</span></b> Monday, October 27, =
2008
1:29 PM<br>
<b><span style=3D'font-weight:bold'>To:</span></b> <st1:PersonName =
w:st=3D"on">Henry
 Lau</st1:PersonName>; dl-Design Review<br>
<b><span style=3D'font-weight:bold'>Subject:</span></b> RE: func spec- =
quota tree
support on prepopulated dir</span></font><o:p></o:p></p>

</div>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Why the restriction to simple quota =
trees
only is neces<st1:PersonName w:st=3D"on">sa</st1:PersonName>ry? I =
don&#8217;t see
much of a difference in the implementation.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>What is the reason for failing with =
an
error if a nested quota tree is encountered? The implementation is not
complicated and does not differ a lot from simple quota tree =
case.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>It seems that the idea of avoiding =
COW
adds a lot of unneces<st1:PersonName w:st=3D"on">sa</st1:PersonName>ry
complications and restrictions in the implementation. The amount of COWs =
or
disk traffic or inode file fragmentation is no different from what =
happens when
an administrator or a regular user does something like recursive =
application of
permissions in the explorer. The fact that every inode which belongs to =
a new
quota tree has to be modified should be easy to explain to the users and =
should
not cause any objections. Doing COW normally avoids all the mirroring =
and
snapshot issues.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<div style=3D'border:none;border-left:solid blue 1.5pt;padding:0in 0in =
0in 4.0pt'>

<div>

<div class=3DMsoNormal align=3Dcenter style=3D'text-align:center'><font =
size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'>

<hr size=3D2 width=3D"100%" align=3Dcenter tabindex=3D-1>

</span></font></div>

<p class=3DMsoNormal><b><font size=3D2 face=3DTahoma><span =
style=3D'font-size:10.0pt;
font-family:Tahoma;font-weight:bold'>From:</span></font></b><font =
size=3D2
face=3DTahoma><span style=3D'font-size:10.0pt;font-family:Tahoma'> =
<st1:PersonName
w:st=3D"on">Henry Lau</st1:PersonName> <br>
<b><span style=3D'font-weight:bold'>Sent:</span></b> Friday, October 24, =
2008
2:17 PM<br>
<b><span style=3D'font-weight:bold'>To:</span></b> dl-Design Review<br>
<b><span style=3D'font-weight:bold'>Subject:</span></b> RE: func spec- =
quota tree
support on prepopulated dir</span></font><o:p></o:p></p>

</div>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D3 color=3Dnavy face=3D"Times New =
Roman"><span
style=3D'font-size:12.0pt;color:navy'>Hi,</span></font><o:p></o:p></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Here is the functional spec to =
support quota
tree on pre-populated directories. Please enjoy and provide me =
feedback.<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><a
href=3D"file:///\\mightydog\software\Kegg\Functional%20Specs\quotaTree_Di=
rs.doc">\\mightydog\software\Kegg\Functional
Specs\quotaTree_Dirs.doc</a><o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Thanks,<o:p></o:p></span></font></p>=


<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'>Henry<o:p></o:p></span></font></p>

<p class=3DMsoNormal><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;font-family:Arial;color:navy'><o:p>&nbsp;</o:p></span></font></p>

<p class=3DMsoNormal style=3D'margin-bottom:12.0pt'><font size=3D3
face=3D"Times New Roman"><span style=3D'font-size:12.0pt'><img =
border=3D0 width=3D332
height=3D38 id=3D"_x0000_i1025" =
src=3D"cid:image001.jpg@01C93938.7AFB2140"><o:p></o:p></span></font></p>

<table class=3DMsoNormalTable border=3D0 cellspacing=3D0 cellpadding=3D0 =
width=3D332
 style=3D'width:249.0pt'>
 <tr>
  <td width=3D150 valign=3Dtop style=3D'width:112.5pt;padding:0in 0in =
0in 0in'>
  <p class=3DMsoNormal style=3D'margin-bottom:12.0pt'><st1:PersonName =
w:st=3D"on"><strong><b><font
   size=3D1 face=3DVerdana><span =
style=3D'font-size:7.5pt;font-family:Verdana'>Henry
   Lau</span></font></b></strong></st1:PersonName><font size=3D1 =
face=3DVerdana><span
  style=3D'font-size:7.5pt;font-family:Verdana'><br>
  Software engineer<br>
  <br>
  ONStor, Inc.<br>
  <b><span style=3D'font-weight:bold'>office:</span></b> =
408.963-2486<o:p></o:p></span></font></p>
  <p class=3DMsoNormal><font size=3D1 face=3DVerdana><span =
style=3D'font-size:7.5pt;
  font-family:Verdana'>Henry.lau@onstor.com <br>
  <a href=3D"http://www.onstor.com"><b><font color=3D"#005c8f"><span
  =
style=3D'color:#005C8F;font-weight:bold;text-decoration:none'>http://www.=
onstor.com</span></font></b></a></span></font><o:p></o:p></p>
  </td>
  <td width=3D150 valign=3Dtop style=3D'width:112.5pt;padding:0in 0in =
0in 0in'>
  <p class=3DMsoNormal><!--[if gte vml 1]><v:shapetype id=3D"_x0000_t75" =

   coordsize=3D"21600,21600" o:spt=3D"75" o:preferrelative=3D"t" =
path=3D"m@4@5l@4@11@9@11@9@5xe"=20
   filled=3D"f" stroked=3D"f">
   <v:stroke joinstyle=3D"miter" />
   <v:formulas>
    <v:f eqn=3D"if lineDrawn pixelLineWidth 0" />
    <v:f eqn=3D"sum @0 1 0" />
    <v:f eqn=3D"sum 0 0 @1" />
    <v:f eqn=3D"prod @2 1 2" />
    <v:f eqn=3D"prod @3 21600 pixelWidth" />
    <v:f eqn=3D"prod @3 21600 pixelHeight" />
    <v:f eqn=3D"sum @0 0 1" />
    <v:f eqn=3D"prod @6 1 2" />
    <v:f eqn=3D"prod @7 21600 pixelWidth" />
    <v:f eqn=3D"sum @8 21600 0" />
    <v:f eqn=3D"prod @7 21600 pixelHeight" />
    <v:f eqn=3D"sum @10 21600 0" />
   </v:formulas>
   <v:path o:extrusionok=3D"f" gradientshapeok=3D"t" =
o:connecttype=3D"rect" />
   <o:lock v:ext=3D"edit" aspectratio=3D"t" />
  </v:shapetype><v:shape id=3D"_x0000_s1026" type=3D"#_x0000_t75" =
alt=3D"" style=3D'position:absolute;
   =
margin-left:387.5pt;margin-top:0;width:78.75pt;height:99.75pt;z-index:1;
   mso-wrap-distance-left:0;mso-wrap-distance-right:0;
   mso-position-horizontal:right;mso-position-horizontal-relative:text;
   mso-position-vertical-relative:line' o:allowoverlap=3D"f">
   <v:imagedata src=3D"cid:image002.gif@01C93938.7AFB2140" =
o:title=3D"storage_mag_product_of_year" />
   <w:wrap type=3D"square"/>
  </v:shape><![endif]--><![if !vml]><img width=3D105 height=3D133
  src=3D"cid:image002.gif@01C93938.7AFB2140" align=3Dright =
v:shapes=3D"_x0000_s1026"><![endif]><font
  size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:12.0pt'><o:p></o:p></span></font></p>
  </td>
 </tr>
</table>

<p class=3DMsoNormal><font size=3D3 face=3D"Times New Roman"><span =
style=3D'font-size:
12.0pt'><o:p>&nbsp;</o:p></span></font></p>

</div>

</div>

</div>

</body>

</html>

------_=_NextPart_002_01C93973.29FEB7E8--

------_=_NextPart_001_01C93973.29FEB7E8
Content-Type: image/jpeg;
	name="image001.jpg"
Content-Transfer-Encoding: base64
Content-ID: <image001.jpg@01C93938.7AFB2140>
Content-Description: image001.jpg
Content-Location: image001.jpg

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAmAUwDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDk/OHr
T0Yv06etZP2n3rTifFkHH93NYV6jhH3d2etk+Cp4qtL2vwxV7dyXvjcM01mKsAe/espbk7gQec1q
THCIT13Cs5SnSkk3e534fD4TH0ZyhT5HCz3buuz+4eQQODTUbeSM9KSadYZEDdGOKcse2VmHRhWK
xE1B83XY9KpkuEniY+yj7sXaSu+qunvc6Dwp4Rv/ABXcSiB1gtoTiSdxnB9AO5rrn+G+gRzfZH8U
RrdjgozIDn/dzmsv4Z+OdK0L7ZpeqzfZ1kl3xTEEr7g+ldVdeAfB3ii4mvNPv8TSnezWlwrjJ745
/pXoRd0mfG14qNWUVsm/zOOk8ASp4vTQRqSnfD5yz+V29MZ/rWH4q0J/C+tf2c9x9oPlLJvCbRzn
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

------_=_NextPart_001_01C93973.29FEB7E8
Content-Type: image/gif;
	name="image002.gif"
Content-Transfer-Encoding: base64
Content-ID: <image002.gif@01C93938.7AFB2140>
Content-Description: image002.gif
Content-Location: image002.gif

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
EAQAOw==

------_=_NextPart_001_01C93973.29FEB7E8--
